package gotnames.web.st;

import gotnames.Utils;
import gotnames.dm.ProfilePicture;

import java.io.IOException;
import java.io.OutputStream;
import java.util.Collection;

import javax.jdo.PersistenceManager;
import javax.jdo.Query;

import org.apache.commons.io.IOUtils;

import com.medallia.spider.Task;
import com.medallia.tiny.CollUtils;

/**
 * Task which serves the image data; the input is the md5 of the picture.
 */
public class PictureTask extends Task {
	
	@Input interface Params {
		String t();
	}
	
	PostAction action(Params p, PersistenceManager pm) {
		String pictureMd5 = p.t();
		if (pictureMd5 == null)
			throw new IllegalArgumentException("Missing argument");
		
		Query query = pm.newQuery(ProfilePicture.class);
		query.setFilter("md5 == fieldParam");
		query.declareParameters("String fieldParam");
		query.setRange(0, 1);
		ProfilePicture pp = CollUtils.getOneOrNull(Utils.<Collection<ProfilePicture>>cast(query.execute(pictureMd5)));
		
		if (pp == null)
			throw new IllegalArgumentException("Invalid token");
		
		final byte[] image = pp.getPicture().getBytes();
			
		return new BinaryDataPostAction() {
			@Override protected boolean isCacheForever() {
				return true;
			}
			@Override protected String getContentType() {
				return "image/jpeg";
			}
			@Override protected void writeTo(OutputStream out) throws IOException {
				IOUtils.write(image, out);
			}
		};
	}

}
